Data storage subsystems provide a capability for storage of large amounts of data, for example, in data storage subsystems having data storage drives. The data may be temporarily stored in non volatile storage, such as battery backed memory, while it is being stored in the data storage drives and/or transmitted to a remote site for backup storage. Thus, if there is a power outage that affects the data storage subsystem, the non volatile temporary storage can maintain the data for a period of time by continually self refreshing the data. An example of a data storage subsystem employing non volatile storage is the IBM® DS 6000.
The memory may be divided into logical memory blocks, and each has a logical indicator that indicates if the logical memory block is storing data to be destaged and is to be “preserved” across a code reboot or power loss.
Any time that a power loss event occurs while any region of the non volatile storage is marked “preserved”, the hardware switches the non volatile storage from full system power to battery back up power and the firmware puts the non volatile storage into a self refresh mode.
A normal power off sequence, where there is some time available before power actually goes out, will destage data from the non volatile storage (and associated cache) to the data storage drives, such as disk drives. Once the non volatile storage is empty, the logical memory blocks corresponding to the non volatile storage will be marked as “non-preserved”, and the self refresh mode is not implemented.
It may be that the non volatile storage data is preserved across a power cycle but is not needed. In one example, a “failover” or “quiesce” may have been conducted, moving the data from the present non volatile storage to another non volatile storage or cache, and then destaging the data. Global status tracks may be implemented in the data storage drive to indicate whether data of the non volatile storage is needed or has been destaged and is not needed.
Once power is resumed, the firmware will take the non volatile storage back out of self refresh node and begin an initial power on IML (Initial Microcode Load) sequence. As part of that sequence, areas marked “preserved” and that contain needed data are not tested by the IML process and the saved data may be destaged to the data storage drives. The control structures that describe the memory may be checked for validity, and, when the data is destaged, the data may be checked for corruption, for example, by error correction codes, to give an indication whether the preserved and needed data survived the power sequence.
If the non volatile storage was not preserved or contains data that is unneeded, the IML sequence tests the non volatile storage memory by writing and reading back test patterns looking for defective memory.